home *** CD-ROM | disk | FTP | other *** search
/ Visual Cafe 3 / Visual Cafe 3.ISO / Vcafe / JFC.bin / AudioPreview.java < prev    next >
Text File  |  1998-06-30  |  5KB  |  155 lines

  1. /*
  2.  * @(#)AudioPreview.java    1.5 01/28/98
  3.  * 
  4.  * Copyright (c) 1997 Sun Microsystems, Inc. All Rights Reserved.
  5.  * 
  6.  * This software is the confidential and proprietary information of Sun
  7.  * Microsystems, Inc. ("Confidential Information").  You shall not
  8.  * disclose such Confidential Information and shall use it only in
  9.  * accordance with the terms of the license agreement you entered into
  10.  * with Sun.
  11.  * 
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
  13.  * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  14.  * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  15.  * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
  16.  * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
  17.  * THIS SOFTWARE OR ITS DERIVATIVES.
  18.  * 
  19.  * @author James Gosling
  20.  */
  21.  
  22. package com.sun.java.swing;
  23.  
  24. import java.awt.*;
  25. import java.awt.event.*;
  26. import java.io.*;
  27. import sun.audio.*;
  28.  
  29. import com.sun.java.swing.event.*;
  30.  
  31. /** A component to preview an audio file, intended to fit into the
  32.  *  preview slot of a FileChooser.  In normal usage, only the
  33.  *  ask method is of interest: it pops up a dialog box with
  34.  *  a FileChooser containing an instance of this previewer and
  35.  *  filtering for appropriate files.
  36.  *  @author James Gosling
  37.  */
  38. public class AudioPreview extends Component implements FilePreview {
  39.     private String txt[] = new String[10];
  40.     private boolean blank;
  41.     private AudioStream audiostream;
  42.  
  43.     private static FileChooserFilter fcf;
  44.     /** Convenience method to prompt for the name of an audio file.
  45.     @param fparent the parent frame for the dialog box.
  46.         fparent may be null if a default parent has
  47.         been established with StandardDialog
  48.     @param description a description string that will be shown
  49.         to the user to indicate what is being requested
  50.     @param initial the initial value for the string
  51.     @param columns the default width (in 'm's) of the TextField
  52.     @param target the ChangeListener that will be informed if the
  53.             OK or Apply buttons are hit.
  54.     @return If target is null,
  55.         the dialog box will be modal and the method
  56.         will return the final result, or null if canceled.
  57.         Otherwise, the
  58.         dialog box is non-modal, the method returns null
  59.         immediatly, and the listener is informed when
  60.         appropriate.  The source of the change event will
  61.         be a FileChooser.
  62.     @see StandardDialog
  63.      */
  64.     public static File ask(Component parent, String title, File dfc,
  65.                     ChangeListener target) {
  66.         StandardDialog tDialog;
  67.         FileChooser tChooser;
  68.         tChooser = new FileChooser ();
  69.         tDialog = new StandardDialog(parent, tChooser, target == null);
  70.         tChooser.getModel().setFile(dfc);
  71.         if (fcf == null) {
  72.             fcf = new FileChooserFilter();
  73.             fcf.add("Internet audio (au)");
  74.         }
  75.         tChooser.setFilter(fcf);
  76.         tChooser.setPreview(new AudioPreview());
  77.         if (target != null)
  78.             tDialog.addChangeListener(target);
  79.         if (title != null)
  80.             tDialog.setTitle(title);
  81.         tDialog.start();
  82.         File r = tDialog.isCanceled() || target != null ? null
  83.         : tChooser.getModel().getFile();
  84.         if (target == null)
  85.             tDialog.dispose();
  86.         return r;
  87.     }
  88.  
  89.  
  90.     public AudioPreview(){}
  91.     public void setPreviewFile(File f) {
  92.         if (f == null) {
  93.             if (audiostream != null) {
  94.                 try {
  95.                     AudioPlayer.player.stop(audiostream);
  96.                     audiostream.close();
  97.                 }
  98.                 catch(Throwable e){}
  99.                 audiostream = null;
  100.             }
  101.             if (!blank) {
  102.                 blank = true;
  103.                 repaint();
  104.             }
  105.             return;
  106.         }
  107.         blank = false;
  108.         boolean playing = audiostream != null;
  109.         if (audiostream != null) {
  110.             AudioPlayer.player.stop(audiostream);
  111.             try { audiostream.close(); }
  112.             catch(IOException e){}
  113.             audiostream = null;
  114.         }
  115.         InputStream in = null;
  116.         try {
  117.             in = new FileInputStream(f);
  118.             audiostream = new AudioStream(in);
  119.             AudioPlayer.player.start(audiostream);
  120.         } catch(Throwable e) {
  121.             try { if (in != null) in.close(); }
  122.             catch(IOException err){}
  123.             audiostream = null;
  124.         }
  125.         if ((audiostream!=null)!=playing) repaint();
  126.     }
  127.     private Dimension isize = new Dimension(120,120);
  128.     public void setSize(int w, int h) {
  129.         if (w!=isize.width || h!=isize.height) {
  130.             isize.width = w;
  131.             isize.height = h;
  132.             invalidate();
  133.         }
  134.     }
  135.     public void setBounds(int x, int y,int width, int height) {
  136.         super.setBounds(x, y, width, height);
  137.         setSize(width, height);
  138.     }
  139.     public Dimension getPreferredSize() {
  140.         return isize;
  141.     }
  142.     public Dimension getMinimumSize() {
  143.         return getPreferredSize();
  144.     }
  145.     public void paint(Graphics g) {
  146.         if (!blank && audiostream != null) {
  147.             Dimension d = getSize();
  148.             int w = d.width;
  149.             int h = d.height;
  150.             for (int i = 1; i<30; i+=4)
  151.                 g.drawArc(i,i,w-i*2,h-i*2,45,-90);
  152.         }
  153.     }
  154. }
  155.